﻿/**************************************************************
 *
 * 唯一标识：5245e864-54e3-4044-af0c-f0c9799c1865
 * 命名空间：Sgr.DataCategories.Application.Queries
 * 创建时间：2023/8/17 15:30:28
 * 机器名称：DESKTOP-S0D075D
 * 创建者：antho
 * 电子邮箱：fengqinhua2016@163.com
 * 描述：行政区划查询服务接口
 *
 **************************************************************/

using Sgr.Application.ViewModels;
using Sgr.DataCategories.Application.ViewModels;
using System.Threading;
using System.Threading.Tasks;

namespace Sgr.DataCategories.Application.Queries
{
    /// <summary>
    /// 行政区划查询服务接口
    /// </summary>
    public interface IAdministrativeDivisionQueries
    {
        /// <summary>
        /// 分页获取行政区划列表
        /// </summary>
        /// <param name="request">查询条件</param>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns>行政区划分页列表</returns>
        Task<PagedResponse<OutAdministrativeDivisionViewModel>> GetPagedListAsync(InAdministrativeDivisionSearchModel request, CancellationToken cancellationToken = default);

        /// <summary>
        /// 获取所有启用的行政区划列表
        /// </summary>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns></returns>
        Task<IEnumerable<OutAdministrativeDivisionViewModel>> GetNormalListAsync(CancellationToken cancellationToken = default);

        /// <summary>
        /// 获取指定父级下的行政区划列表
        /// </summary>
        /// <param name="parentId">父级行政区划ID</param>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns>行政区划视图模型集合</returns>
        Task<IEnumerable<OutAdministrativeDivisionViewModel>> GetListAsync(long parentId, CancellationToken cancellationToken = default);

        /// <summary>
        /// 根据ID获取行政区划详情
        /// </summary>
        /// <param name="id">行政区划ID</param>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns>行政区划详情，不存在时返回null</returns>
        Task<OutAdministrativeDivisionViewModel?> GetByIdAsync(long id, CancellationToken cancellationToken = default);

        /// <summary>
        /// 获取所有行政区划条目列表
        /// </summary>
        /// <param name="cancellationToken">取消令牌</param>
        /// <returns>行政区划名称和值的列表</returns>
        Task<IList<NameValue>> GetItemsAsync(CancellationToken cancellationToken = default);
    }
}